package com.yangfan.thread.thread_wangwenjun08;

import java.util.function.Consumer;

/**
 * 自我理解: 这个类 是用来隔离 蛋糕制作者 与 买蛋糕的人 之间的 一个 角色  类似一个 服务员
 *      如  买蛋糕的人 不需要 知道 制作蛋糕的 细节  ， 制作蛋糕的人 也不需要关心 蛋糕制作好后给谁
 */
public class FutureService {

    /**
     * @param task 任务的处理 过程实现  制作蛋糕的 过程
     * @param consumer 任务完成后的 回调 例如 蛋糕制作完成 后 打电话 通知 买家
     * @param <T>
     * @return
     */
    public <T> Future<T> submit(final FutureTask<T> task, final Consumer<T> consumer) {
        AsynFuture<T> asynFuture = new AsynFuture<>();
        new Thread(() -> {
            T result = task.call();
            asynFuture.done(result);
            consumer.accept(result);
        }).start();
        return asynFuture;
    }

}